/*============================================================================*/
/*                   CONTINENTAL AUTOMOTIVE SYSTEMS                           */
/*============================================================================*/
/*                        OBJECT SPECIFICATION                                */
/*============================================================================*
* name:            HALPortst.c
* version:         1.1
* created_by:      Rodrigo Casados
* date_created:    June 7 2013
*=============================================================================*/
/* DESCRIPTION : Source file to implement main function.                      */
/*============================================================================*/
/* FUNCTION COMMENT : Implements entry point (main function) and other        */
/* application stuff.                                                         */
/*                                                                            */
/*============================================================================*/
/*                               OBJECT HISTORY                               */
/*============================================================================*/
/*  REVISION |   DATE      |                               |      AUTHOR      */
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*  1.1      | 7/June/2013 |                               | Rodrigo Casados */
/* Initial version for the Smart Car Race 2010 contest using Freescale        */
/* Bolero micro.                                                              */
/*============================================================================*/

#include "HALPorts.h"
volatile uint32_t dly,lly;

void Init_Peri(void)
{
	Init_Ports();
	Init_Ports2();
	Init_Btn();
	Init_LED();	
}

uint16_t fv_Checkbtn(void)
{
uint16_t Debounce;
uint16_t Debounce2;
static uint16_t Value=0;

	if(IO_PinRead(pin_PE0)==0 && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3))
	{
		 Debounce = 1;	
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1)==0 && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3))
	{
		Debounce = 2;	
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2)==0 && IO_PinRead(pin_PE3))
	{
		Debounce = 3;		
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3)==0)
	{
		Debounce = 4;	
	}
//////////////////////	
	Delaywait();
//////////////////	
		if(IO_PinRead(pin_PE0)==0 && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3))
	{
		 Debounce2 = 1;	
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1)==0 && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3))
	{
		Debounce2 = 2;	
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2)==0 && IO_PinRead(pin_PE3))
	{
		Debounce2 = 3;		
	}
	else if(IO_PinRead(pin_PE0) && IO_PinRead(pin_PE1) && IO_PinRead(pin_PE2) && IO_PinRead(pin_PE3)==0)
	{
		Debounce2 = 4;	
	}
	
/*   Compares the Vallue after the time*/	

	if (Debounce==Debounce2)
	{
	switch(Debounce)
			{
				case 1:
				{
					Value=  1;
					break;
				}
				case 2:
				{
					Value=  2;
					break;
				}
				case 3:
				{
					Value=  3;
					break;
				}
				case 4:
				{
					Value=  4;
					break;
				}
				default:
					break;
			}
	}
	return  Value;
}

void Delaywait(void)
{
  for(lly=0;lly<2500;lly++)
  {	
  }//Delaylong();
}

void OFF_LED(void)
{
IO_PinWrite(pin_PE4,0); 
IO_PinWrite(pin_PE5,1);
IO_PinWrite(pin_PE6,1);
IO_PinWrite(pin_PE7,1);
}


void SLOW_LED(void)
{
IO_PinWrite(pin_PE4,1); 
IO_PinWrite(pin_PE5,0);
IO_PinWrite(pin_PE6,1);
IO_PinWrite(pin_PE7,1);
}


void FAST_LED(void)
{
IO_PinWrite(pin_PE4,1); 
IO_PinWrite(pin_PE5,1);
IO_PinWrite(pin_PE6,0);
IO_PinWrite(pin_PE7,1);
}

void AUTO_LED(void)
{
IO_PinWrite(pin_PE4,1); 
IO_PinWrite(pin_PE5,1);
IO_PinWrite(pin_PE6,1);
IO_PinWrite(pin_PE7,0);
}